// LZC implementation for J2ME
// Copyright 2011 Igor Gatis  All rights reserved.
// http://code.google.com/p/compress-j2me/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright notice,
//       this list of conditions and the following disclaimer.
//
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//
//     * Neither the name of Google Inc. nor the names of its contributors may
//       be used to endorse or promote products derived from this software
//       without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

package com.nulldev.util.data.CompressionAPI.thirdparty.lzc;

// Byte version of StringBuffer.
class ByteBuffer {
	private byte[] content;
	private int length;

	public ByteBuffer(int size) {
		this.content = new byte[size];
	}

	public void reset() {
		this.length = 0;
	}

	public int size() {
		return this.length;
	}

	public byte[] rawBuffer() {
		return this.content;
	}

	public void append(byte ch) {
		if (this.length >= this.content.length) {
			byte[] oldBuffer = this.content;
			this.content = new byte[oldBuffer.length + 16];
			System.arraycopy(oldBuffer, 0, this.content, 0, length);
		}
		this.content[this.length++] = ch;
	}

	public void reverse() {
		for (int i = 0; i < this.length / 2; i++) {
			byte swp = this.content[i];
			this.content[i] = this.content[this.length - 1 - i];
			this.content[this.length - 1 - i] = swp;
		}
	}
}
